#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include "SerialInfo.h"
#include "datasave.h"
#include "serthread.h"
#include <QByteArray>
#include <QIntValidator>
#include <QMainWindow>
#include <QStringList>

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow {
    Q_OBJECT

public:
    MainWindow(QWidget* parent = nullptr);
    ~MainWindow();

    // 1.创建子线程对象
    QThread* t_ser;
    // 2.创建任务类对象
    SerThread* m_ser_work;

    QThread* t_datasave;
    DataSave* m_save_work;
    Sinfo* info = nullptr; // 保存串口配置信息
    ScomInfo* comInfo = nullptr; // 保存串口端口详细信息
    QStringList portStringList; // 保存当前串口号
    QByteArray txData = nullptr;
    QByteArray rxData = nullptr;
    QIntValidator* aIntValidator; // 限定波特率下拉框只能输入数字，最高为1M

    void getportInfo();
    void initSerialInfo();
    void SerStop();
    void FileStop();

    void SerialClose();
private slots:
    void on_pushButton_get_ser_clicked();

    void on_pushButton_open_ser_clicked();

    void on_pushButton_close_ser_clicked();

    void on_pushButton_test_clicked();

    void on_checkBox_lineEnd_stateChanged(int arg1);

    void on_pushButton_send_ser_clicked();

    void on_checkBox_save_file_stateChanged(int arg1);

    void on_pushButton_clean_clicked();

    void on_checkBox_hexSend_stateChanged(int arg1);

    void on_checkBox_hex_stateChanged(int arg1);

    void on_checkBox_stamp_stateChanged(int arg1);

private:
    Ui::MainWindow* ui;
    qint32 portNum = 0;
    bool timeFlag = false; // 时间戳标志位
    bool hexrxFlag = false; // 16进制接收标志位
    bool hextxFlag = false; // 16进制发送标志位
    bool aeFlag = false; // 加入换行符标志位
    bool awFlag = false; // 自动换行标志位
    bool trFlag = false; // 定时发送标志位

    void message(const char* str);

    void SetUiEnable(bool flag);

signals:
    void sig_SendSerialConfig(Sinfo* info);
    void sig_OpenSerial();
    void sig_isCloseSerial();
    void sig_save_file(bool);
    void sig_close_file();
    void sig_save_stamp(bool);
    void sig_isSendData(QByteArray,bool);

};
#endif // MAINWINDOW_H
